﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using BolsaTalentos.DataContextClasses;

namespace BolsaTalentos.BLL
{
    public class Habilidad
    {
        //Campos
        private int id;
        private string descripcion;

        //Propiedades
        public int ID
        {
            get { return this.id; }
        }
        public string Descripcion
        {
            get { return this.descripcion; }
            set { this.descripcion = value; }
        }
        
        //Constructores
        public Habilidad(int IDToSearch)
        {
            try
            {
                DataClassesDataContext DB = new DataClassesDataContext();

                DataContextClasses.Habilidade Hab = (from h in DB.Habilidades
                                                      where h.ID == IDToSearch
                                                      select h).First();

                this.id = Hab.ID;
                this.descripcion = Hab.Descripcion;
            }
            catch (Exception Ex)
            {
                throw new Exception("Esta habilidad no existe, debe agregarla\n" + Ex.Message);
            }
        }
        public Habilidad(string Descripcion)
        {
            this.descripcion = Descripcion;
        }

        //Metodos
        public void Insertar()
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            DataContextClasses.Habilidade HabilidadToInsert = new DataContextClasses.Habilidade();

            try
            {
                HabilidadToInsert.Descripcion = this.Descripcion;

                DB.Habilidades.InsertOnSubmit(HabilidadToInsert);
                DB.SubmitChanges();
            }
            catch (SqlException Ex)
            {
                throw new Exception("Esta habilidad no se puede insertar. Es posible que ya exista en la base de datos" + Ex.Message);
            }
        }
        public void Actualizar()
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            try
            {
                DataContextClasses.Habilidade Habilidad = (from h in DB.Habilidades
                                                            where h.ID == this.id
                                                            select h).First();
                Habilidad.ID = this.id;
                Habilidad.Descripcion = this.Descripcion;

                DB.SubmitChanges();
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }

        public static List<Habilidad> GetHabilidadesByEgresado(int EgresadoID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            var Habilidades = (from h in DB.Egresados_Habilidades
                               where h.ID_Egresado == EgresadoID
                               select h);

            List<Habilidad> HabilidadesDeEgresado = new List<Habilidad>();

            foreach (var item in Habilidades)
            {
                Habilidad HabilidadAIntroducir = new Habilidad(item.ID_Habilidad);
                HabilidadesDeEgresado.Add(HabilidadAIntroducir);
            }
            return HabilidadesDeEgresado;
        }
        public static List<Habilidad> GetHabilidadesByVacante(int VacanteID)
        {
            DataClassesDataContext DB = new DataClassesDataContext();

            var Habilidades = (from h in DB.Vacantes_Habilidades
                               where h.ID_Vacante == VacanteID
                               select h);

            List<Habilidad> HabilidadesDeVacante = new List<Habilidad>();

            foreach (var item in Habilidades)
            {
                Habilidad HabilidadAIntroducir = new Habilidad(item.ID_Habilidad);
                HabilidadesDeVacante.Add(HabilidadAIntroducir);
            }
            return HabilidadesDeVacante;
        }

        public static List<Habilidad> GetAllHabilidades() 
        {
            DataClassesDataContext DB = new DataClassesDataContext();
            List<Habilidad> ListHabilidadToReturn = new List<Habilidad>();

            var QueryHabilidades = from v in DB.Habilidades
                                   select v;

            foreach (DataContextClasses.Habilidade item in QueryHabilidades)
            {
                ListHabilidadToReturn.Add(new Habilidad(item.ID));
            }

            return ListHabilidadToReturn;
        }

        public static void CrearHabilidad(string DescripcionHabilidad) 
        {
            new Habilidad(DescripcionHabilidad).Insertar();
        }
    }
}

    


